<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 闭包就是指有权访问另外一个函数的作用域变量的函数
    // 一个函数要访问另外一个函数的变量
    // 要形成闭包，函数里面要嵌套函数

    function outerFunction() {
      let a = 10;
      function innerFunction() {
        return a;
      }
      return innerFunction;
    }

    const fn = outerFunction();
    let b = fn();
    console.log(b);
    b = null;




    // 闭包的好处
    // 可以将比较敏感的数据放在函数的内部，比起全局变量更加安全。通过闭包的方式再暴露到外面，提高代码的安全性。
    // 可以用闭包缓存函数计算的结果，减少计算的次数
    // js是没有私有变量的概念，只能用闭包来模拟私有变量


    // 闭包的缺点
    // 闭包会保留外部函数对变量的引用。如果用好不用了，将这个变量清除，将这个变量手动设置成null，方便浏览器的垃圾回收机制的回收
    // 会导致代码的逻辑更加复杂，难以理解，写的时候要尽量保证代码的可读性和可维护性

    
  </script>
</body>
</html>